#include <stdio.h>

int main(int argc, char const *argv[])
{
/*
    int   a ;
    char  b;
    
    printf("请输入一个整数>:");
    scanf("%d",&a);

    printf("请输入一个字符>:");
    scanf("%c",&b);

    printf("a=%d\n",a);
    printf("b=%c\n",b);
    printf("b=%d\n",b);
*垃圾字符的产生，在输入一个整数100 回车
*100 被 scanf（"%d",&a）; 赋值给a ，回车键被残留在终端
*之后程序有执行了scanf("%c",&b); %c 拔键盘上的asccii 输入都作为有校输入
*回车（10,'\n'）被作为有效输入，读取赋值给 b， 因此b 的值为10，就是回车
*
*/

    int   a ;
    char  b;
    
    printf("请输入一个整数>:");
    scanf("%d",&a);

    printf("请输入一个字符>:");

 /***第一种解决垃圾字符的方案： 空格***/
    #if 0
    scanf(" %c",&b);  //从终端取一个字符
    #endif 

 /***第二种解决垃圾字符的方案: %*c 抑制符***/
    #if 0
    scanf("%*c%c",&b);  //从终端取一个字符
    #endif 

/***第三种解决垃圾字符的方案: getchar() ***/
    #if 0
    getchar();          //读取一个字符，不接受
    scanf("%c",&b);  //从终端取一个字符
    #endif 

/***第四种解决垃圾字符的方案: （可用于处理多个垃圾字符）***/
    #if 1
    scanf("%*[^\n]");       //抑制除了 '\n' 以外的所有字符
    scanf("%*c");           //再抑制一个 '\n' 
    scanf("%c",&b);         //从终端取一个字符
    #endif 

    printf("a=%d\n",a);
    printf("b=%c\n",b);
    printf("b=%d\n",b);

    return 0;
}
